package br.com.jmed.control;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;

import br.com.jmed.model.Medicamento;
import br.com.jmed.service.MedicamentoService;

@ManagedBean(name = "medicamentoControl")
@SessionScoped
public class MedicamentoControl extends BaseControl implements Serializable {
	private static final long serialVersionUID = 1L;

	@EJB
	private MedicamentoService medicamentoService;

	@Inject
	private Medicamento medicamento;

	private Medicamento medicamentoSelect;

	private List<Medicamento> listMedicamento;

	public String salvarCadastroMedicamento() throws IOException {
		listMedicamento = new ArrayList<Medicamento>();
		medicamento.setUsuarioInclusao(getUsuario());
		medicamento.setDataInclusao(new Date());
		medicamentoService.salvarMedicamento(medicamento);
		this.medicamento = new Medicamento();
		return "/pages/medicamento/medicamentoBusca.xhtml";
	}

	public String novoCadastroMedicamento() throws IOException {
		this.medicamento = new Medicamento();
		this.listMedicamento = new ArrayList<Medicamento>();
		return "/pages/medicamento/medicamentoIncluir.xhtml";
	}

	public String alterarCadastroMedicamento() throws IOException {
		listMedicamento = new ArrayList<Medicamento>();
		medicamentoSelect.setUsuarioAlteracao(getUsuario());
		medicamentoSelect.setDataAlteracao(new Date());
		medicamentoService.atualizarMedicamento(medicamentoSelect);
		medicamentoSelect = new Medicamento();
		listMedicamento = medicamentoService.findAllMedicamentos();
		return "/pages/medicamento/medicamentoBusca.xhtml";
	}

	public String abrirAlterarMedicamento(Medicamento medicamento) {
		this.medicamentoSelect = medicamentoService
				.findMedicamentoByCod(medicamento.getCodigo());
		return "/pages/medicamento/medicamentoAlterar.xhtml";
	}

	public void pesquisarMedicamento() {
		listMedicamento = new ArrayList<Medicamento>();
		if (medicamento.getCodigo() != 0) {
			medicamento = medicamentoService.findMedicamentoByCod(medicamento
					.getCodigo());
			listMedicamento.add(medicamento);
		} else if (!medicamento.getDescricao().trim().equals("")) {
			listMedicamento = medicamentoService
					.findMedicamentoByNome(medicamento.getDescricao());
		} else {
			listMedicamento = medicamentoService.findAllMedicamentos();
		}
		medicamento = new Medicamento();
	}

	public List<String> pesquisarAutoCompMedicamento(String prefix) {
		List<String> toReturn = new ArrayList<String>();
		listMedicamento = new ArrayList<Medicamento>();
		listMedicamento = medicamentoService.findAllMedicamentos();
		for (Medicamento m : listMedicamento) {
			if (m.getDescricao().startsWith(prefix)) {
				toReturn.add(m.getDescricao());
			}
		}
		return toReturn;
	}

	public MedicamentoService getMedicamentoService() {
		return medicamentoService;
	}

	public void setMedicamentoService(MedicamentoService medicamentoService) {
		this.medicamentoService = medicamentoService;
	}

	public Medicamento getMedicamento() {
		return medicamento;
	}

	public void setMedicamento(Medicamento medicamento) {
		this.medicamento = medicamento;
	}

	public Medicamento getMedicamentoSelect() {
		return medicamentoSelect;
	}

	public void setMedicamentoSelect(Medicamento medicamentoSelect) {
		this.medicamentoSelect = medicamentoSelect;
	}

	public List<Medicamento> getListMedicamento() {
		return listMedicamento;
	}

	public void setListMedicamento(List<Medicamento> listMedicamento) {
		this.listMedicamento = listMedicamento;
	}
}
